#pragma once

#include <string>
#include "Player.hh"

// 房间抽象接口类,所有具体房间类的基类
class IRoom {
private:
    bool visited_ = false;    // 记录房间是否已被访问过

public:
    // 析构函数
    virtual ~IRoom() = default;

    // 默认构造、拷贝构造和赋值运算符
    IRoom() = default;
    IRoom(const IRoom& other) = default;
    IRoom& operator=(const IRoom& other) = default;

    // 访问状态相关函数
    bool isVisited() const { return visited_; }         // 获取房间访问状态
    void setVisited(bool visited = true) { visited_ = visited; }  // 设置房间访问状态
    
    // 纯虚函数,子类必须实现
    virtual int getRoomNumber() const = 0;              // 获取房间编号
    virtual std::string getCategory() const = 0;        // 获取房间类型
    virtual std::string getDescription() const = 0;     // 获取房间描述
    virtual void displayInfo() const = 0;               // 显示房间信息
    virtual void enter(Player* player) = 0;             // 进入房间时的处理逻辑
    virtual int getFloor() const = 0;                   // 获取房间所在楼层
};